/********************************************************
*Definicion de lista simplemente encadenada             *
*Author     :   Simon Emmanuel Gutierrez Brida          *
*Version    :   0.1                                     *
*Fecha      :   Octubre/2011                            *
*------------------------------------------------       *
*Define la estructura y funcione asociadas al manejo    *
*de lista simplemente encadenada                        *
*Una lista esta formada por :                           *
*- inicio   : la cabeza de la lista                     *
*- longitud : la longitud de la lista                   *
*********************************************************/

#ifndef LISTAC3D_H
#define LISTAC3D_H

#include "nodoc3d.h"
#include "../variable.h"
#include <stdbool.h>


typedef struct {
    NodoC3D    *inicio;
    int        longitud;
} ListaC3D;

/*funciones publicas para manipular listas*/

/*constructores*/

/**
 * Construye una nueva lista vacia
 */
ListaC3D* nuevaListaC3D();

/*lectura de informacion*/

/**
 * Obtiene un elemento dado su indice
 * parametros
 * lista: la lista de la cual obtener un elemento
 * index: el indice del elemento a obtener
 */
Com3D* obtener_listaC3D(ListaC3D *lista, int index);

/**
 * Obtiene la longitud de la lista
 * parametros
 * lista: la lista de la cual se va a obtener su longitud
 */
int longitud_listaC3D(ListaC3D *lista);

/*escritura de informacion*/

/**
 * Agrega un nuevo comando a la lista
 * parametros
 * lista: la lista a la cual agregar el nuevo comando
 * com: el comando a agregar
 * index: el indice sobre el cual agregar el comando
 */
void agregar_listaC3D(ListaC3D *lista, Com3D *com, int index);

/**
 * Elimina un comando de la lista
 * parametros
 * lista: la lista de la cual eliminar
 * index: el indice del comando a eliminar
 */
void eliminar_listaC3D(ListaC3D *lista, int index);

#endif